﻿//1358. 包含所有三种字符的子字符串数目
//给你一个字符串 s ，它只包含三种字符 a, b 和 c 。
//请你返回 a，b 和 c 都 至少 出现过一次的子字符串数目。


class Solution {
public:
    int numberOfSubstrings(string s)
    {
        int ans = 0;
        int n = s.size();
        int left = 0;
        int right = -1;
        unordered_map<char, int> table;
        //枚举左端点
        for (right = 0; right < n; right++)
        {
            table[s[right]]++;
            while (table['a'] && table['b'] && table['c'])
            {
                table[s[left++]]--;
            }
            ans += left;
        }
        return ans;
    }
};